package com.ruoyi.web.utils.qg_pay.entity.request;

import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import com.ruoyi.common.utils.serializer.BigDecimalToPlainStringSerializer;
import com.ruoyi.web.enums.HttpMethodEnum;
import com.ruoyi.web.utils.qg_pay.anno.QGPayHttpConfig;
import com.ruoyi.web.utils.qg_pay.entity.QGPayCommonRequestParam;
import com.ruoyi.web.utils.qg_pay.entity.response.QGPayOrderPayRes;
import com.ruoyi.web.utils.qg_pay.entity.response.QGPaySingleOrderRes;
import lombok.Data;

import java.math.BigDecimal;

/**
 * 代付下单
 *
 * @since 2023/3/14 14:28
 */
@Data
@QGPayHttpConfig(url = "/singleOrder",
        method = HttpMethodEnum.POST,
        needSignature = true,
        responseType = QGPaySingleOrderRes.class)
public class QGPaySingleOrder extends QGPayCommonRequestParam<Object, QGPaySingleOrder> {

    /**
     * 商户号
     */
    private String merchant;

    /**
     * 商户订单号
     */
    @JsonSerialize(using = ToStringSerializer.class)
    private Long orderNo;

    /**
     * 业务编码
     */
    private String businessCode;

    /**
     * 账号 (印度UPI代付请填写UPI账号)。巴基斯坦代付当identityType=BANK时传入银行卡号，identityType=Wallet时为钱包号(手机号）。俄罗斯代付当bankCode=CARD时，填写 16位银行卡号。
     */
    private String accNo;

    /**
     * 账户名
     */
    private String accName;

    /**
     * 代付金额
     */
    @JsonSerialize(using = BigDecimalToPlainStringSerializer.class)
    private BigDecimal orderAmount;

    /**
     * 银行编码（印尼网银代收请填写BT，其它填BANK，代付根据商户对应银行填写）
     */
    private String bankCode;

    /**
     * 手机号。伊朗代表收款人电话必填（10位）
     */
    private String phone;

    /**
     * 印度银行卡代付需要填写(IFSC账号)。哥伦比亚代付必填身份证号(8-11 位)。巴西代付需要填写(用户CPF)。埃及代付需要提交银行开户行全称。巴基斯坦代付代表客户身份证号，不带横杆，需正确填写，否则影响成功率，示例：3130377369148。其余国家可不填
     */
    private String province;

    /**
     * 巴基斯坦代付必填，代表绑定的邮箱，需正确填写，否则影响成功率。其余国家可不填
     */
    private String identityNo;

    /**
     * 巴基斯坦代付必填，代表提现方式，可选值：银行卡：BANK, 钱包：WALLET。其余国家可不填
     */
    private String identityType;

    /**
     * 回调通知地址
     */
    private String notifyUrl;

    /**
     * 备注
     */
    private String remake;

    /**
     * 签名
     */
    private String sign;
}
